home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- #include <string.h>
-
- FILE *in,*out;
- char infile[20],outfile[20];
- char temp[20]="sk.$$$";
- int SourceFrames,DestFrames;
- char buffer[1000];
- char t[40],t1[40];
-
- void parse_args(int argc, char *argv[]);
- void print_usage(void);
- int getline(char *s, FILE *f);
- void Getword(char *s, char *t);
- void writeword(char *s);
- void writenumber(int n);
- static char version[]="$VER: Scalekey 1.0 Amiga ";
-
- int main(int argc, char *argv[])
- {
- int sf,df,sft,dft,l,f;
- int len=0;
- float ratio;
-
- parse_args(argc, argv);
- if ((in=fopen(infile,"rt"))==NULL) {
- printf("Cannot open input file %s\n",strupr(infile));
- exit(1);
- }
- if ((out=fopen(temp,"wt"))==NULL) {
- printf("Error opening temp file.\n");
- exit(1);
- }
- getline(buffer,in);
- Getword(buffer,t);
- if (strcmp(t,"STAGE")!=0) {
- printf("Input file is not Imagine Staging Language file.\n");
- fclose(out);
- fclose(in);
- remove(temp);
- exit(1);
- }
- writeword(t);
- fputc('\n',out);
- getline(buffer,in);
- Getword(buffer,t);
- writeword(t);
- Getword(buffer,t);
- SourceFrames=atoi(t);
- writenumber(DestFrames);
- fputc('\n',out);
- ratio=(float)DestFrames/(float)SourceFrames;
- f=(ratio<1) ? 1 : 0;
- while (!feof(in))
- {
- getline(buffer,in);
- while(buffer[0]!='\n') {
- Getword(buffer,t);
- if (strcmp(t,"FRAMES")==0) {
- writeword(t);
- Getword(buffer,t);
- Getword(buffer,t1);
- sf=atoi(t);
- df=atoi(t1);
- l=df-sf;
- if (sf!=1&&df!=1)
- {
- sft=len+1;
- dft=ceil(df*ratio);
- if (dft>DestFrames) dft=DestFrames;
- if (dft==DestFrames)
- len=0;
- else
- len=dft;
- }
- else if(sf==1)
- {
- sft=sf;
- dft=ceil(df*ratio);
- if (dft>DestFrames) dft=DestFrames;
- if (dft==DestFrames)
- len=0;
- else
- len=dft;
- }
- else if(sf==1&&df==1)
- {
- sft=1;
- dft=1;
- if (dft==DestFrames)
- len=0;
- else
- len=1;
- }
- writenumber(sft);
- writenumber(dft);
- }
- else
- writeword(t);
- }
- fputc('\n',out);
- }
- fclose(in);
- fclose(out);
- if (strcmp(infile,outfile)==0)
- {
- remove(infile);
- rename(temp,outfile);
- }
- else
- {
- remove(outfile);
- rename(temp,outfile);
- remove(temp);
- }
- free(t);
- }
-
- void parse_args(int argc, char *argv[])
- {
- printf("\nScaleKey utility for Imagine using Imaging Staging Language.\n");
- printf("Version 1.0 Copyright (C) 1995 Andrey Zmievskiy. Jan 1995\n\n");
- printf("Version 1.0 Amiga compiled Joop van de Wege Jan 1995\n\n");
- if (argc<3) {
- print_usage();
- }
- strcpy(infile,"");
- strcpy(outfile,"");
- strcpy(infile,argv[1]);
- if (argv[2][0]=='-') {
- DestFrames=atoi(&argv[2][1]);
- strcpy(outfile,infile);
- return;
- }
- strcpy(outfile,argv[2]);
- if (argv[3][0]=='-') {
- DestFrames=atoi(&argv[3][1]);
- if (DestFrames<2) {
- printf("You cannot use numbers less than 2 for frames.\n");
- exit(1);
- }
- }
- else
- print_usage();
- }
-
- void print_usage(void)
- {
- printf("Usage: scalekey <filename> [outputfile] -<number of frames>\n");
- printf("Input filename should be staging file in ASCII format.\n");
- printf("Ex: scalekey stage stage.1 -180\n");
- exit(1);
- }
-
- int getline(char *s, FILE *f)
- {
- fgets(s,256,f);
- }
-
- void Getword(char *s, char *tmp)
- {
- int i=0;
- int k;
- int j=0;
-
- while (s[i]==' ') {
- for(k=0;s[k]!='\n'; k++)
- s[k]=s[k+1];
- }
- while(s[i]!=' '&&s[i]!='\n')
- {
- tmp[j++]=s[i];
- for(k=i;s[k]!='\n';k++)
- s[k]=s[k+1];
- }
- tmp[j]='\0';
- }
-
- void writeword(char *s)
- {
- fputs(s,out);
- fputc(' ',out);
- }
-
- void writenumber(int n)
- {
- char s[20];
-
- itoa(n,s,10);
- fputs(s,out);
- fputc(' ',out);
- }
-
- /* Dummy function because neither Aztec nor SAS/C do have this function */
- /* Seems to work well. I know I have seen this function 'itoa' somewhere */
- /* but can't find it anywhere. */
- /* Could make the executable much smaller if made more Amiga specific */
- /* LIKE: use 'Write' or 'puts' instead of 'printf' */
-
- itoa(int n, char *s, int number)
- {
- sprintf(s, "%d",n);
- }
-